import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  // 状态仓库，定义全局共享数据，提供唯一公共数据源的，所有共享数据都要统一放到Stor的state内进行存储
  // 访问state中的数据方式
  // 第一种：this.$store.state.全局数据名称
  // 第二种：1.从vuex中按需导入mapState函数
  // import { mapState } from 'vuex'
  // 2. 通过1导入的mapState函数，将当前组件需要的全局数据映射为当前的computed计算属性
  // computed: {
  //  ... mapState(['全局数据名称'])
  // }
  // 3. 使用直接调用数据名即可
  state: {
    ShrinkageStart: false, // 后台导航收缩状态，false 展开 true 收起
    BreadcrumbType: 'default', // 面包屑类型， defaul默认，capsule胶囊
    BreadcrumbSeparator: '/', // 面包屑默认分隔符
    BreadcrumTableTabs: [] // 标签型面包屑
  },
  // Getter 接受 state 作为其第一个参数
  getters: {
  },
  // 用于变更state中的数据 虽然方式繁琐，但是可以集中监控所有数据的变化
  // 触发第一种方式：methode:{
  //  方法名：{
  //    this.$store.commit('mutations中的方法名')
  //    }
  // }
  // commit就是调用某个mutations内的方法
  // 第二种方式：
  // 1.从vuex中按需导入mutations函数
  // import { mapMutations } from 'vuex'
  // 2. 通过1导入的mutations函数，将当前组件需要的全局数据映射为当前的methods方法
  // methods: {
  //  ... mapMutations(['mutations中的方法名称1', 'mutations中的方法名称2'])
  // }
  // 注意 mutations函数中执行异步操作，只有mutations才能修改state数据
  mutations: {
    // 侧边栏收缩收缩与展开, 第一个形参永远都是state
    ContractionAndExpansion(state) {
      state.ShrinkageStart = !state.ShrinkageStart
    },
    // 改变面包屑分割符
    Change_BreadcrumbSeparator(state, step) {
      state.BreadcrumbSeparator = step
    },
    // 改变面包屑确定
    Change_BreadcrumbSettingUpFormOk(state, stepObj) {
      state.BreadcrumbType = stepObj.stepType
      state.BreadcrumbSeparator = stepObj.step
    },
    // 改变面包屑类型
    Change_BreadcrumbRadioChange(state, step) {
      state.BreadcrumbType = step
    },
    // 对标签型面包屑进行整理（添加）
    BreadcrumTableTabsAddFun(state, routerObj) {
      state.BreadcrumTableTabs = routerObj
    }
  },
  // 用于处理异步任务，
  // actions中必须触发mutations中的方法来改变state,如果要修改，必须通过参数.commit()去触发某个mutations中的方法
  // 触发actions：this.$store.dispatch('actions中方法名')
  actions: {
    // 对标签型面包屑进行=--异步--==整理（添加）
    Async_BreadcrumTableTabsAddFun(context, routerObj) {
      context.commit('BreadcrumTableTabsAddFun', routerObj)
    }
  },
  modules: {
  }
})
